/*
  Name: 图的邻接矩阵存储结构 
  Copyright: BTC 2004
  Author: Zhuang Bo
  Date: 2004
  Description: 
*/

#ifndef GRAPH_H_INCLUDED
#define GRAPH_H_INCLUDED

#include <stdio.h>
#include "ds.h"

///////////////////////////////////////////////////////////
//图的邻接矩阵表示
#define MAX_VERTEX_NUM 20 //最大顶点数
#define VexType char //顶点类型
#define ArcType int
#define INFINITY INT_MAX  //无穷大 
typedef struct {
    VexType  vexs[MAX_VERTEX_NUM]; //顶点向量 
    ArcType  arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵 
    int      vexnum;   //顶点个数
} MGraph;

///////////////////////////////////////////////////////////
//图的基本操作声明 

//输入顶点和弧的信息，建立图
Status CreateGraph(MGraph &G); 

//图G中顶点v的第一个邻接点
int FirstAdjVex(MGraph G, int v);
//图G中顶点v在w之后的下一个邻接点
int NextAdjVex(MGraph G, int v, int w);

//打印邻接矩阵(调试用)
void PrintAdjMatrix(MGraph G);


///////////////////////////////////////////////////////////
//基本操作的实现

//输入顶点和弧的信息，建立图
Status CreateGraph(MGraph &G)
{
    //-------------------------------------
    // TODO (#1#): 先输入顶点个数和顶点数据,然后输入弧，建立图 
    return ERROR;
    //-------------------------------------
}

//图G中顶点v的第一个邻接点，不存在时返回 -1 
int FirstAdjVex(MGraph G, int v)
{
    //-------------------------------------
    // TODO (#1#): 返回顶点v的第一个邻接点
    return -1;
    //-------------------------------------
}

//图G中顶点v在w之后的下一个邻接点，不存在时返回 -1
int NextAdjVex(MGraph G, int v, int w)
{
    //-------------------------------------
    // TODO (#1#): 返回顶点v在w之后的下一个邻接点
    return -1;
    //-------------------------------------
}

//打印邻接矩阵
void PrintAdjMatrix(MGraph G) 
{
    int i,j;
    for(i=0; i<G.vexnum; i++) {
        write(G.vexs[i]);
        for(j=0; j<G.vexnum; j++)
            printf("%5d", G.arcs[i][j]);
        printf("\n");
    }
}

#endif //GRAPH_H_INCLUDED

